home *** CD-ROM | disk | FTP | other *** search
/ Chip 2011 November / CHIP_2011_11.iso / Programy / Narzedzia / Aplikacje_64-bitowe / Daum_PotPlayer / PotPlayer1.5.29332-x64.EXE / PxShader / SharpenComplex (jim ro).txt < prev    next >
Text File  |  2010-05-20  |  2KB  |  73 lines

  1. // SharpenComplex ( jim.ro )=ps_2_0
  2. // http://www.homecinema-fr.com/forum/viewtopic.php?t=29814317 
  3.  
  4. sampler s0 : register(s0);
  5. float4 p1 : register(c1);
  6.  
  7. #define dx (p1[0])
  8. #define dy (p1[1])
  9.  
  10. float4 main( float2 tex : TEXCOORD0 ) : COLOR
  11. {
  12.     // definition des pixels : original, flout? corig? final
  13.     float4 ori;
  14.     float4 flou;
  15.     float4 cori;
  16.     float4 final;
  17.  
  18.     // r?upp?ation de la matrice de 9 points
  19.     // [ 1, 2 , 3 ]
  20.     // [ 4,ori, 5 ]
  21.     // [ 6, 7 , 8 ]
  22.  
  23.     ori = tex2D(s0, tex);
  24.     float4 c1 = tex2D(s0, tex + float2(-dx,-dy));
  25.     float4 c2 = tex2D(s0, tex + float2(0,-dy));
  26.     float4 c3 = tex2D(s0, tex + float2(dx,-dy));
  27.     float4 c4 = tex2D(s0, tex + float2(-dx,0));
  28.     float4 c5 = tex2D(s0, tex + float2(dx,0));
  29.     float4 c6 = tex2D(s0, tex + float2(-dx,dy));
  30.     float4 c7 = tex2D(s0, tex + float2(0,dy));
  31.     float4 c8 = tex2D(s0, tex + float2(dx,dy));
  32.  
  33.     // calcul image floue (filtre gaussien)
  34.     // pour normaliser les valeurs, il faut diviser par la somme des coef
  35.     // 1/(1+2+1+2+4+2+1+2+1) = 1/ 16 = .0625
  36.     flou = (c1+c3+c6+c8 + 2*(c2+c4+c5+c7)+ 4*ori)*0.0625;
  37.  
  38.     // soustraction de l'image flou ?l'image originale
  39.     cori = 2*ori - flou;
  40.  
  41.     // d?ection des contours
  42.     float delta1;
  43.     float delta2;
  44.     float value;
  45.  
  46.     // par filtre de sobel
  47.     // Gradient horizontal
  48.     //   [ -1, 0 ,1 ]
  49.     //   [ -2, 0, 2 ]
  50.     //   [ -1, 0 ,1 ]
  51.     delta1 =  (c3 + 2*c5 + c8)-(c1 + 2*c4 + c6);
  52.  
  53.     // Gradient vertical
  54.     //   [ -1,- 2,-1 ]
  55.     //   [  0,  0, 0 ]
  56.     //   [  1,  2, 1 ]
  57.     delta2 = (c6 + 2*c7 + c8)-(c1 + 2*c2 + c3);
  58.  
  59.     // calcul
  60.     value = sqrt( mul(delta1,delta1) + mul(delta2,delta2) ) ;
  61.  
  62.     if( value >.3 ) {
  63.         // si contour, sharpen
  64.         #define Sharpen_val0       2.0
  65.         #define Sharpen_val1       0.125
  66.         final = ori*2 - (c1 + c2 + c3 + c4 + c5 + c6 + c7 + c8 ) * 0.125 ;
  67.         //final= float4(1,0,0,0);
  68.         return final;
  69.     }
  70.  
  71.     // sinon, image corrig?
  72.     return cori;
  73. }